home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / asm / amislib.exe / AMIS.MAC < prev    next >
Text File  |  1992-09-12  |  34KB  |  1,354 lines

  1. .XLIST
  2. ;-----------------------------------------------------------------------
  3. ; Alternate Multiplex Interrupt Specification Library
  4. ; AMIS.MAC    Public Domain 1992 Ralf Brown
  5. ;        You may do with this software whatever you want, but
  6. ;        common courtesy dictates that you not remove my name
  7. ;        from it.
  8. ;
  9. ; Version 0.90
  10. ; LastEdit: 9/12/92
  11. ;-----------------------------------------------------------------------
  12.  
  13. AMIS_VERSION equ 350    ;(version 3.5 of the Alternate Multiplex Interrupt Spec)
  14. AMISLIB_VERSION equ 090 ;(version 0.90 of this library)
  15.  
  16. ;-----------------------------------------------------------------------
  17. ; Return codes for various API calls
  18. ;
  19.  
  20. ; general, applies to all standard calls
  21. AMIS_NOTIMPLEMENTED      equ 0
  22. AMIS_SUCCESSFUL        equ 0FFh
  23.  
  24. ; additional return codes for Uninstall (function 02h)
  25. AMIS_UNINST_FAILED    equ 1
  26. AMIS_UNINST_WILL_DO    equ 2
  27. AMIS_UNINST_SAFE_ON    equ 3
  28. AMIS_UNINST_SAFE_OFF    equ 4
  29. AMIS_UNINST_TRYLATER     equ 5
  30.  
  31. ; additional return codes for Popup (function 03h)
  32. AMIS_POPUP_TRYLATER    equ 1
  33. AMIS_POPUP_WILLDO    equ 2
  34. AMIS_POPUP_BUSY        equ 3
  35. AMIS_POPUP_NEEDHELP    equ 4
  36.  
  37. ; additional return codes for Check Interrupt Chained (function 04h)
  38. AMIS_CHAIN_DONTKNOW    equ 1
  39. AMIS_CHAIN_HOOKED    equ 2
  40. AMIS_CHAIN_HOOKED_ADDR    equ 3
  41. AMIS_CHAIN_HOOKLIST    equ 4
  42. AMIS_CHAIN_NOTUSED    equ 0FFh
  43.  
  44. ; hotkey type bits returned by Get Hotkeys (function 05h)
  45. HK_INT09ENTRY        equ 1    ; TSR checks keys before calling orig INT 09h
  46. HK_INT09EXIT        equ 2    ; TSR checks keys after calling orig INT 09h
  47. HK_INT15ENTRY        equ 4    ; TSR checks keys before chaining INT 15h/AH=4Fh
  48. HK_INT15EXIT        equ 8    ; TSR checks keys after chaining INT 15h/AH=4Fh
  49. HK_INT16OLD        equ 10h ; TSR checks on INT 16/AH=00h-02h
  50. HK_INT16NEW        equ 20h ; TSR checks on INT 16/AH=10h-12h
  51.  
  52. ; hotkey shift bits returned by Get Hotkeys (function 05h)
  53. HK_NONE         equ 0000h  ; no shift keys
  54. HK_RSHIFT        equ 0001h  ; right shift key
  55. HK_LSHIFT        equ 0002h  ; left shift key
  56. HK_BOTHSHIFT        equ 0003h  ; both Shift keys must be pressed
  57. HK_ANYCTRL        equ 0004h  ; either Control key must be pressed
  58. HK_ANYALT        equ 0008h  ; either Alt key must be pressed
  59. HK_SCRLLOCK_ON        equ 0010h  ; ScrollLock must be on when hotkey pressed
  60. HK_NUMLOCK_ON        equ 0020h  ; NumLock must be on when hotkey pressed
  61. HK_CAPSLOCK_ON        equ 0040h  ; CapsLock must be on when hotkey pressed
  62. HK_ANYSHIFT        equ 0080h  ; either Shift key must be pressed
  63. HK_LCTRL        equ 0100h  ; left control key
  64. HK_LALT         equ 0200h  ; left Alt key
  65. HK_RCTRL        equ 0400h  ; right control key
  66. HK_RALT         equ 0800h  ; right Alt key
  67. HK_BOTHCTRL        equ 0500h  ; both Control keys must be pressed
  68. HK_BOTHALT        equ 0A00h  ; both Alt keys must be pressed
  69. HK_SCROLLOCK        equ 1000h  ; ScrollLock must be pressed with hotkey
  70. HK_NUMLOCK        equ 2000h  ; NumLock must be pressed with hotkey
  71. HK_CAPSLOCK        equ 4000h  ; CapsLock must be pressed with hotkey
  72. HK_SYSREQ        equ 8000h  ; SysRq must be pressed with hotkey
  73.  
  74. ; hotkey flag bits returned by Get Hotkeys (function 05h)
  75. HK_CHAINBEFORE        equ 1    ; TSR chains hotkey before processing it
  76. HK_CHAINAFTER        equ 2    ; TSR chains hotkey after processing it
  77. HK_MONITOR        equ 4    ; other TSRs should pass through this hotkey
  78.                 ; so that it can be monitored
  79. HK_NOPRESSRELEASE    equ 8    ; hotkey won't activate if other keys pressed
  80.                 ; and released before hotkey combination 
  81.                 ; completed
  82. HK_REMAPPED        equ 10h ; this key is remapped into some other key
  83.  
  84. HK_NOCHAIN        equ 0    ; TSR swallows hotkey
  85.  
  86. ; hotkey scan codes returned by Get Hotkeys (function 05h)
  87. SCAN_NONE    equ 0
  88. SCAN_ESC    equ 1
  89. SCAN_1        equ 2
  90. SCAN_2        equ 3
  91. SCAN_3        equ 4
  92. SCAN_4        equ 5
  93. SCAN_5        equ 6
  94. SCAN_6        equ 7
  95. SCAN_7        equ 8
  96. SCAN_8        equ 9
  97. SCAN_9        equ 10
  98. SCAN_0        equ 11
  99. SCAN_HYPHEN    equ 12
  100. SCAN_EQUAL    equ 13
  101. SCAN_BACKSP    equ 14
  102. SCAN_TAB    equ 15
  103. SCAN_Q        equ 16
  104. SCAN_W        equ 17
  105. SCAN_E        equ 18
  106. SCAN_R        equ 19
  107. SCAN_T        equ 20
  108. SCAN_Y        equ 21
  109. SCAN_U        equ 22
  110. SCAN_I        equ 23
  111. SCAN_O        equ 24
  112. SCAN_P        equ 25
  113. SCAN_LBRACKET    equ 26
  114. SCAN_RBRACKET    equ 27
  115. SCAN_ENTER    equ 28
  116. SCAN_CTRL    equ 29
  117. SCAN_A        equ 30
  118. SCAN_S        equ 31
  119. SCAN_D        equ 32
  120. SCAN_F        equ 33
  121. SCAN_G        equ 34
  122. SCAN_H        equ 35
  123. SCAN_J        equ 36
  124. SCAN_K        equ 37
  125. SCAN_L        equ 38
  126. SCAN_SEMICOLON    equ 39
  127. SCAN_SQUOTE    equ 40
  128. SCAN_BACKQUOTE    equ 41
  129. SCAN_LSHIFT    equ 42
  130. SCAN_BACKSLASH    equ 43
  131. SCAN_Z        equ 44
  132. SCAN_X        equ 45
  133. SCAN_C        equ 46
  134. SCAN_V        equ 47
  135. SCAN_B        equ 48
  136. SCAN_N        equ 49
  137. SCAN_M        equ 50
  138. SCAN_COMMA    equ 51
  139. SCAN_PERIOD    equ 52
  140. SCAN_SLASH    equ 53
  141. SCAN_RSHIFT    equ 54
  142. SCAN_GREYSTAR    equ 55
  143. SCAN_ALT    equ 56
  144. SCAN_SPACE    equ 57
  145. SCAN_CAPSLK    equ 58
  146. SCAN_F1        equ 59
  147. SCAN_F2        equ 60
  148. SCAN_F3        equ 61
  149. SCAN_F4        equ 62
  150. SCAN_F5        equ 63
  151. SCAN_F6        equ 64
  152. SCAN_F7        equ 65
  153. SCAN_F8        equ 66
  154. SCAN_F9        equ 67
  155. SCAN_F10    equ 68
  156. SCAN_NUMLK    equ 69
  157. SCAN_SCRLLK    equ 70
  158. SCAN_HOME    equ 71
  159. SCAN_UP        equ 72
  160. SCAN_PGUP    equ 73
  161. SCAN_GREYMINUS    equ 74
  162. SCAN_LEFT    equ 75
  163. SCAN_KP5    equ 76
  164. SCAN_RIGHT    equ 77
  165. SCAN_GREYPLUS    equ 78
  166. SCAN_END    equ 79
  167. SCAN_DOWN    equ 80
  168. SCAN_PGDN    equ 81
  169. SCAN_INS    equ 82
  170. SCAN_DEL    equ 83
  171. SCAN_SYSRQ    equ 84
  172. SCAN_F11    equ 87
  173. SCAN_F12    equ 88
  174. HK_ONRELEASE    equ 80h ; hotkey activates on key release (add to scan code)
  175.  
  176. ;-----------------------------------------------------------------------
  177. ; Return codes for AMISLIB functions
  178. ;
  179.  
  180. ; bit flags returned by CHECK_IF_HOTKEYS_USED
  181. HC_EXACT    equ 1        ; exact match found
  182. HC_SUPERSET    equ 2        ; some key whose shift states include ours used
  183. HC_SUBSET    equ 4        ; some key whose shift states included by one of ours used    
  184. HC_OVERLAP    equ 8        ; hotkey overlap found
  185. HC_MONITOR    equ 80h        ; other TSRs monitor one or more hotkeys, but no
  186.                 ;   actual conflict because caller chains them
  187.  
  188. HC_IS_CONFLICT  equ 7Fh        ; mask for testing whether conflict exists
  189.  
  190. ;-----------------------------------------------------------------------
  191. ;
  192. ; Set up a shorthand for the segment containing all the resident code and
  193. ; data.
  194. ; Note: the alignment must be PARA for the code to be properly relocatable
  195. ; in small-code memory models.
  196. ;
  197. TSRcode@ MACRO
  198. TGROUP GROUP RESIDENT_CODE
  199. RESIDENT_CODE SEGMENT PUBLIC PARA 'TSRCODE'
  200.     ASSUME    DS:NOTHING,ES:NOTHING,SS:NOTHING
  201.     ASSUME    CS:TGROUP
  202.     ENDM
  203. TSRcodeEnd@ MACRO
  204. RESIDENT_CODE ENDS
  205.     ENDM
  206.  
  207. ;-----------------------------------------------------------------------
  208. ;
  209. ; Set up shorthands for the segments containing all the resident data,
  210. ; initialized and uninitialized.
  211. ;
  212. TSRdata@ MACRO
  213. RESIDENT_DATA SEGMENT PUBLIC BYTE 'TSRCODE'
  214.     ENDM
  215. TSRdataEnd@ MACRO
  216. RESIDENT_DATA ENDS
  217.     ENDM
  218.  
  219. TSRbss@ MACRO
  220. RESIDENT_BSS SEGMENT PUBLIC BYTE 'TSRCODE'
  221.     ENDM
  222. TSRbssEnd@ MACRO
  223. RESIDENT_BSS ENDS
  224.     ENDM
  225.  
  226. ;-----------------------------------------------------------------------
  227. ;
  228. ; dummy segment for determining the size of the resident code in the
  229. ; executable
  230. ;
  231. TSRlast@ MACRO
  232. RESIDENT_END SEGMENT PUBLIC BYTE 'TSRCODE'
  233.     ENDM
  234. TSRlastEnd@ MACRO
  235. RESIDENT_END ENDS
  236.     ENDM
  237.  
  238. ;-----------------------------------------------------------------------
  239. ;
  240. ; Set up a shorthand for declaring all three resident segments and a group
  241. ; TGROUP for those segments.
  242. ;
  243. TSRgroup@ MACRO
  244. TSRcode@
  245. TSRcodeEnd@
  246. TSRdata@
  247. TSRdataEnd@
  248. TSRbss@
  249. TSRbssEnd@
  250. TSRlast@
  251. TSRlastEnd@
  252. TGROUP GROUP RESIDENT_CODE,RESIDENT_DATA,RESIDENT_BSS,RESIDENT_END
  253.     ENDM
  254.  
  255. ;-----------------------------------------------------------------------
  256. ;
  257. ; Some of the code in ALTMPX.ASM uses conditional assembly to handle
  258. ; segment registers differently in Tiny model than in other models, so
  259. ; we need to ensure that __TINY__ is defined in tiny model.
  260. ;
  261. IFDEF @Model        ; simplified memory models being used?
  262.   IF @Model eq 1    ; tiny model
  263.      IFNDEF __TINY__
  264.        __TINY__ equ 1
  265.      ENDIF ;NDEF
  266.   ENDIF
  267.   IF (@Model eq 1) or (@Model eq 2) or (@Model eq 3) ; Tiny, Small, or Compact?
  268.      DIST equ NEAR
  269.   ELSE
  270.      DIST equ FAR
  271.   ENDIF
  272. ELSE ;DEF @Model    ; else assume TCC/BCC memory-model #defines
  273.    IFDEF __TINY__
  274.       DIST equ NEAR
  275.    ELSEIFDEF __SMALL__
  276.       DIST equ NEAR
  277.    ELSEIFDEF __COMPACT__
  278.       DIST equ NEAR
  279.    ELSE
  280.       DIST equ FAR
  281.    ENDIF
  282. ENDIF
  283.  
  284. IFNDEF __TINY__
  285.    TGROUP@ equ TGROUP
  286. ENDIF
  287.  
  288. ;---------------------------------------------------------------------